import pandas as pd


def generate_update_sql_from_excel(excel_file_path, sheet_name=None):
    """
    从Excel文件读取数据并生成UPDATE SQL语句

    Parameters:
    excel_file_path: Excel文件路径
    sheet_name: 工作表名称，如果为None则读取第一个工作表
    """
    try:
        # 读取Excel文件
        if sheet_name:
            df = pd.read_excel(excel_file_path, sheet_name=sheet_name)
        else:
            df = pd.read_excel(excel_file_path)

        # 检查必要的列是否存在
        required_columns = ['detail表主键id', '新分类']
        missing_columns = [col for col in required_columns if col not in df.columns]

        if missing_columns:
            print(f"错误：Excel文件中缺少以下列: {missing_columns}")
            print(f"当前Excel文件的列名: {list(df.columns)}")
            return

        # 生成SQL语句列表
        sql_statements = []

        # 遍历数据行生成SQL
        for index, row in df.iterrows():
            detail_id = row['detail表主键id']
            new_category = row['新分类']

            # 跳过空值行
            if pd.isna(detail_id) or pd.isna(new_category):
                print(f"警告：第{index + 2}行数据不完整，已跳过")
                continue

            # 处理新分类值，如果包含单引号需要转义
            new_category_escaped = str(new_category).replace("'", "''")

            # 生成SQL语句
            sql = f"UPDATE holiday_content_resource_detail_v2 SET hard_name='{new_category_escaped}' WHERE id={int(detail_id)};"
            sql_statements.append(sql)

        return sql_statements

    except FileNotFoundError:
        print(f"错误：找不到文件 {excel_file_path}")
        return None
    except Exception as e:
        print(f"错误：读取Excel文件时出现异常: {str(e)}")
        return None


def save_sql_to_file(sql_statements, output_file='update_sql.sql'):
    """
    将SQL语句保存到文件
    """
    try:
        with open(output_file, 'w', encoding='utf-8') as f:
            for sql in sql_statements:
                f.write(sql + '\n')
        print(f"SQL语句已保存到文件: {output_file}")
    except Exception as e:
        print(f"保存文件时出错: {str(e)}")


# 使用示例
if __name__ == "__main__":
    # 设置Excel文件路径
    excel_file = "D:\\project_file\\周末智学阶段报告\\周末智学高一下资源导出-数据打标用-2025081.xlsx"  # 请替换为你的Excel文件路径

    # 生成SQL语句
    sql_list = generate_update_sql_from_excel(excel_file)

    if sql_list:
        print(f"成功生成 {len(sql_list)} 条SQL语句\n")

        # 显示前几条SQL语句作为预览
        print("预览前5条SQL语句：")
        for i, sql in enumerate(sql_list[:5], 1):
            print(f"{i}. {sql}")

        if len(sql_list) > 5:
            print("...")

        # 保存到文件
        save_sql_to_file(sql_list)

        # 可选：打印所有SQL语句到控制台
        print("\n所有SQL语句：")
        for sql in sql_list:
            print(sql)
    else:
        print("未能生成SQL语句，请检查Excel文件和列名")

# 如果你知道具体的工作表名称，可以这样调用：
# sql_list = generate_update_sql_from_excel("your_excel_file.xlsx", sheet_name="Sheet1")